#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
int main()
{
    
    int row1=0,col1=0,col2=0;
    while(cin>>row1>>col1>>col2)   ///矩阵一 行  矩阵一 列    矩阵二  列
    {
        vector<vector<int>> matrix1(row1,vector<int>(col1,0));
        vector<vector<int>> matrix2(col1,vector<int>(col2,0));
        vector<vector<int>> matrix3(row1,vector<int>(col2,0));

        for(int i=0;i<row1;i++)
        {
            for(int j=0;j<col1;j++)
                cin>>matrix1[i][j];
         }
        for(int i=0;i<col1;i++)
        {
            for(int j=0;j<col2;j++)
            
            cin>>matrix2[i][j];     
        }
       
        for(int i=0;i<row1;i++)
        {
            for(int j=0;j<col1;j++)
            {
                for(int k=0;k<col2;k++)
                {
                   matrix3[i][k]+=matrix1[i][j]*matrix2[j][k];   ///注意这里的  左边变量有个加号 +   第三个循环里,是对
                    
                }
                
            }
            
        }
        
        for(int i=0;i<row1;i++)
        {
      
            for(int j=0;j<col2-1;j++)
                cout<<matrix3[i][j]<<" ";
            cout<<matrix3[i][col2-1]<<endl;    ///这里是为了格式化输出每行的最后一个数据并换行 这个解法难理解，看下面
        }
        
        
    }
    
    
    
    return 0;
    
}





vector<vector<int> > solve(vector<vector<int> >& a, vector<vector<int> >& b) {
        // write code here
        //
        vector<vector<int>> rlt(a.size(),vector<int>(a.size(),0));
        if (a.size()==0) return rlt;
        for(int i=0;i<a.size();i++)
        {
            for(int j=0;j<b.size();j++)
            {
              int sum=0;
                for(int k=0;k<a.size();k++)
                {
                    sum+=a[i][k]*b[k][j];  //按照数学标准计算方式1
                }
                rlt[i][j]=sum;
                
            }
        }
        return rlt;
    }